package com.focus.wecenter.service;

import com.focus.wecenter.pojo.Topic;
import com.focus.wecenter.util.Message;
import com.focus.wecenter.util.PageBean;
import com.focus.wecenter.web.vo.SearchResult;
import org.hibernate.criterion.DetachedCriteria;

import java.util.List;

/**
 * 话题模块业务接口
 *
 * @author Lv Jing
 * @date 2018年01月07日 22:29
 */
public interface TopicService {

    /**
     * 搜索话题
     * @param query 查询关键字
     * @param limit 查询条数
     * @return 搜索结果
     */
    List<SearchResult> searchTopic(String query, int limit);

    /**
     * 根据讨论数量进行分页 FIXME:这里可能不合适，不应该在web层使用离线查询对象
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Topic> findByAll(int currentPage, int pageSize);

    /**
     * 根据讨论数量进行分页，一个星期内的
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Topic> findByWeek(int currentPage, int pageSize);

    /**
     * 根据讨论数量进行分页，一个月内的
     * @param currentPage  当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Topic> findByMonth(int currentPage, int pageSize);

    /**
     * 根据最新创建时间进行分页
     * @param currentPage  当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Topic> findByRecently(int currentPage, int pageSize);

    /**
     * 根据话题ID查找话题
     * @param topicID  话题ID
     * @return 话题对象
     */
    Topic findTopicByID(int topicID);

    /**
     * 离线查询分页话题
     * @param criteria 离线查询条件
     * @param currentPage 当前页
     * @param pageSize 页面大小
     * @return 分页结果
     */
    PageBean<Topic> findByPage(DetachedCriteria criteria, int currentPage, int pageSize);

    /**
     * 用户关注或者取关话题
     * @param topicID 话题ID
     * @param userID 用户ID
     * @return 消息对象
     */
    Message focus(int topicID, int userID);

    /**
     * 判断用户是否关注了该话题
     * @param topicID 话题ID
     * @param userID 用户ID
     * @return 是否关注
     */
    boolean isFocus(int topicID, int userID);
}
